/*
 * Title: Unix ls命令
 * Author: Yuanshun L
 * Created : 10-otc-2021
 * Question Description: 像unix那样整齐划一地输出
 */

#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<cstdio>

using namespace std;

#define MAX_COL  60 // 屏幕容许一行显示的字符数
int n;// n个文件名
vector<string> files;

int main(){
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);

    string s;
    cin>>n;
    int m = -1,length; // m为最长的字符串长度

    while(n--){
        cin>>s;
        length = s.length();
        if(m<length){
            m = length;
        }

        files.push_back(s);
    }
    n = files.size();

    sort(files.begin(),files.end());

    int col,col2,remain,row;
    col2 = (MAX_COL-m)/(m+2)+1; // 输出的列数
    row = (n-1)/col2 + 1; // 输出的行数

    for(int i=0;i<row;i++){ // 搜索行
        col = (i+1)*col2<=n ? col2: n-(i+1)*col2;
        for(int j=0;j<col;j++){ // 搜索列
            // 根据行和列，求得序号，找到对应的文件名
            s = files[j*row+i];
            // 计算还需要填充的空格数
            remain = (j==col-1 ? m : m+2)-s.length();
            cout<<s;
            for(int k=0;k<remain;k++){
                cout<<' ';
            }
        }
        cout<<endl;
    }

    return 0;
}